Ember.js অ্যাপ্লিকেশন ডেভেলপমেন্টে Unit Test এবং Integration Test দুটি গুরুত্বপূর্ণ টেস্টিং কৌশল। Unit Testing এবং Integration Testing একে অপরের সাথে সম্পর্কিত হলেও, তাদের উদ্দেশ্য এবং কাজের ধরন আলাদা।
এখানে আমরা Unit Test এবং Integration Test এর মধ্যে পার্থক্য এবং Ember.js-এ এগুলোর প্রয়োগের ধারণা আলোচনা করব।
Unit Test
Unit Test একটি নির্দিষ্ট ফাংশন, মেথড, বা মডিউল-এর বৈশিষ্ট্য পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি একটি ছোট্ট ইউনিটের মধ্যে ঘটে এবং লক্ষ্য থাকে শুধুমাত্র ঐ ইউনিটের নির্দিষ্ট কাজ সঠিকভাবে সম্পাদিত হচ্ছে কি না তা যাচাই করা।
Unit Test সাধারণত নিম্নলিখিত বৈশিষ্ট্য অনুসরণ করে:
- একক উপাদান পরীক্ষা: একক ফাংশন বা মেথড পরীক্ষা করা হয়।
- অন্তর্ভুক্ততা পরীক্ষা: এতে বাহ্যিক উপাদান বা ডিপেনডেন্সি কম থাকে।
- স্বাধীনতা: এটি সিস্টেমের অন্যান্য অংশের উপর নির্ভর করে না, সুতরাং ডিপেনডেন্ট ফাংশন বা মডিউলগুলো মক (mock) বা স্টাব (stub) করা হয়।
Ember.js-এ Unit Test
Ember.js-এ Unit Test সাধারণত models, controllers, helpers, বা অন্যান্য ছোট কোড ইউনিটের জন্য ব্যবহৃত হয়। Ember CLI-র মাধ্যমে QUnit ব্যবহার করা হয় ইউনিট টেস্ট লেখার জন্য।
Unit Test এর উদাহরণ:
ধরা যাক, আমাদের একটি Post মডেল আছে এবং আমরা মডেলটির fullTitle মেথড টেস্ট করতে চাই।
Post মডেল:
// app/models/post.js import Model, { attr } from '@ember-data/model'; export default class PostModel extends Model { @attr('string') title; @attr('string') content; get fullTitle() { return `${this.title}: ${this.content}`; } }Unit Test:
// tests/unit/models/post-test.js import { module, test } from 'qunit'; import { setupTest } from 'ember-qunit'; module('Unit | Model | post', function(hooks) { setupTest(hooks); test('fullTitle returns the correct value', function(assert) { let store = this.owner.lookup('service:store'); let post = store.createRecord('post', { title: 'My Title', content: 'This is a post' }); assert.equal(post.fullTitle, 'My Title: This is a post'); }); });
এখানে, আমরা Post মডেলের fullTitle মেথডের কাজ সঠিকভাবে করছে কিনা তা যাচাই করতে Unit Test লিখেছি।
Integration Test
Integration Test একাধিক ইউনিট বা মডিউল একসাথে কাজ করছে কিনা তা পরীক্ষা করে। এটি Unit Test এর চেয়ে বড় পরিসরে কাজ করে এবং একাধিক উপাদানের সহযোগিতায় পুরো সিস্টেমের কার্যকারিতা পরীক্ষা করে। এটি সাধারণত ভিউ, কম্পোনেন্ট, বা টেমপ্লেটের মধ্যে কার্যকরী ইন্টারঅ্যাকশন পরীক্ষা করার জন্য ব্যবহৃত হয়।
Integration Test সাধারণত নিম্নলিখিত বৈশিষ্ট্য অনুসরণ করে:
- বৃহত্তর পরিসরে পরীক্ষা: একাধিক ইউনিট বা মডিউলের সম্পর্ক পরীক্ষা করা হয়।
- সহযোগিতা পরীক্ষা: ইউনিট বা মডিউলগুলোর একসাথে কাজ করার সক্ষমতা পরীক্ষা করা হয়।
- UI এর সাথে কাজ: UI কম্পোনেন্ট, অ্যাকশন এবং ইন্টারঅ্যাকশন পরীক্ষা করা হয়।
Ember.js-এ Integration Test
Ember.js-এ Integration Test সাধারণত components বা routes এবং controllers এর ইন্টিগ্রেশন পরীক্ষা করতে ব্যবহৃত হয়। এর জন্য Ember CLI-তে QUnit এবং Test Helpers ব্যবহার করা হয়।
Integration Test এর উদাহরণ:
ধরা যাক, আমাদের একটি PostComponent কম্পোনেন্ট আছে, যা পোস্টের শিরোনাম এবং কন্টেন্ট দেখায়, এবং এটি Post মডেল ব্যবহার করে। আমরা পরীক্ষা করতে চাই যে, কম্পোনেন্টটি সঠিকভাবে রেন্ডার হচ্ছে কিনা এবং ভিউ-এর সাথে সঠিকভাবে কাজ করছে কিনা।
PostComponent:
// app/components/post-component.js import Component from '@glimmer/component'; export default class PostComponent extends Component { get postTitle() { return this.args.post.title; } get postContent() { return this.args.post.content; } }Integration Test:
// tests/integration/components/post-component-test.js import { module, test } from 'qunit'; import { render } from '@ember/test-helpers'; import { hbs } from 'ember-cli-htmlbars'; import { setupRenderingTest } from 'ember-qunit'; import { setupTest } from 'ember-qunit'; module('Integration | Component | post-component', function(hooks) { setupRenderingTest(hooks); test('it renders post title and content', async function(assert) { // Create a mock post let post = { title: 'Post Title', content: 'This is a test post' }; this.set('post', post); // Render the component await render(hbs`<PostComponent @post={{this.post}} />`); // Check if the title and content are rendered correctly assert.dom(this.element).includesText('Post Title'); assert.dom(this.element).includesText('This is a test post'); }); });
এখানে, আমরা PostComponent কম্পোনেন্টের ইন্টিগ্রেশন পরীক্ষা করেছি। টেস্টে, আমরা একটি post মক ডেটা পাস করেছি এবং তা কম্পোনেন্টে রেন্ডার হয়ে সঠিকভাবে প্রদর্শিত হচ্ছে কিনা তা যাচাই করেছি।
Unit Test এবং Integration Test এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Unit Test | Integration Test |
|---|---|---|
| পরীক্ষার স্কোপ | একক ফাংশন বা মেথড | একাধিক ইউনিট বা মডিউলের সহযোগিতা |
| ডিপেনডেন্সি | বাহ্যিক উপাদান বা ডিপেনডেন্সি মক (mock) করা হয় | বাহ্যিক উপাদান বা মডিউলগুলো প্রকৃতভাবে পরীক্ষা করা হয় |
| পরীক্ষার উদ্দেশ্য | নির্দিষ্ট ফাংশন বা মেথডের কাজ সঠিক কিনা তা পরীক্ষা | মডিউল বা উপাদানগুলির একত্রিত কাজ সঠিক কিনা তা পরীক্ষা |
| উদাহরণ | মডেল মেথড, কন্ট্রোলারের একক ফাংশন | কম্পোনেন্ট, রাউট, বা টেমপ্লেটের সহযোগিতা পরীক্ষা করা |
Ember.js-এ Test Helper
Test Helpers হল টেস্টিং সুবিধা যা টেস্ট লেখাকে সহজ এবং দ্রুত করে তোলে। Ember.js-এ Test Helpers ব্যবহৃত হয় @ember/test-helpers থেকে, যা টেস্ট লেখার প্রক্রিয়াকে সহজ করে।
কিছু সাধারণ Test Helpers:
- render(): একটি টেমপ্লেট রেন্ডার করতে।
- click(): একটি বাটন বা লিঙ্ক ক্লিক করতে।
- fillIn(): একটি ইনপুট ফিল্ডে ডেটা প্রবেশ করাতে।
- assert.dom(): DOM-এ কোনো উপাদান আছে কিনা তা যাচাই করতে।
উপসংহার
Unit Testing এবং Integration Testing দুটি Ember.js অ্যাপ্লিকেশন ডেভেলপমেন্টে গুরুত্বপূর্ণ ভূমিকা পালন করে। Unit Test ছোট ইউনিট বা ফাংশনের সঠিকতা পরীক্ষা করে, যেখানে Integration Test একাধিক ইউনিট বা মডিউলের একত্রিত কাজের সঠিকতা পরীক্ষা করে। Ember.js-এ এই টেস্টিং কৌশলগুলি QUnit এবং Test Helpers ব্যবহার করে লেখা হয়, যা ডেভেলপারদের কোডের কার্যকারিতা নিশ্চিত করতে সহায়ক।
Read more